Technical Q&A ME07
Finding the VM Backing Store

Q: éÑÇÕÉoÉbÉNÉAÉbÉvÅEÉvÉçÉOÉâÉÄÇèëǢǃǢNjÇ∑Ç™ÅAâºëzÉÅÉÇÉäÇà VM Storage ÉtÉ@ÉCÉãÇå©Ç¬ÇØÇƒÅAǪÇÍÇÕÉoÉbÉNÉAÉbÉvǵǻǢÇÊǧDžǵÇΩÇ¢ÇΔévǢNjÇ∑ÅBÇ«ÇÃÇÊǧDžǵÇΩÇÁÇÊÇ¢Ç≈ǵÇÂǧǩÅH

A: égópíÜÇÃâºëzÉÅÉÇÉä VM Storage ÉtÉ@ÉCÉãÇíTÇ∑ç≈ó«ÇÃï˚ñ@ÇÕÅAà»ëOÇÕÉ}ÉjÉÖÉAÉãÇ…ãLç⁄ÇÃǻǩǡÇΩ Gestalt ÉZÉåÉNÉ^ÇégǧDZÇΔÇ≈Ç∑ÅBégÇ¢ï˚ÇÕéüÇÃí ÇËÇ≈Ç∑ÅB
enum {
    gestaltVMBackingStoreFileRefNum = 'vmbs'
};

DZÇÃÉZÉåÉNÉ^ÇÕåªç›égópíÜÇÃÅgVM StorageÅhÉtÉ@ÉCÉãÇ÷ÇÃÉtÉ@ÉCÉãéQèΔî‘çÜÇï‘ǵNjÇ∑ÅBéüÇÃÇÊǧDžÅAPBGetFCBInfoSync ÇåƒÇ—èoǵǃÅAéQèΔî‘çÜÇ FSSpec Ç…ïœä∑Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

OSErr FindVMStorage(FSSpec *fss) {
    OSErr err;
    long gestaltResult;
    FCBPBRec fcbPB;
    Str255 theName;

    err = Gestalt(gestaltVMBackingStoreFileRefNum, &gestaltResult);
    if (err == noErr) {
        fcbPB.ioNamePtr = theName;
        fcbPB.ioVRefNum = 0;
        fcbPB.ioRefNum = gestaltResult;
        fcbPB.ioFCBIndx = 0;
        err = PBGetFCBInfoSync(&fcbPB);
        if (err == noErr) {
            err = FSMakeFSSpec(fcbPB.ioFCBVRefNum,
                    fcbPB.ioFCBParID, theName, fss);
        }
    }
    return err;
}

[2001îN3åé30ì˙]